<?php
/*
 * Termine une partie en cours, seul le joueur qui a gagné la partie
 * peut la terminer proprement
 *
 * ex : /cartine/selector/release/?player='robert'&card='carte_1'
 */

// Vérification du joueur connecté
if(!isset($_SESSION['playerId'])){
	throw new Exception('Merci de vous authentifier.', HTTP_UNAUTHORIZED);
}

//Détection de l'existence de la partie
if(!isset($_SESSION['gameId']) || !is_file(DIR_GAME . $_SESSION['gameId'])){
    throw new Exception('La partie n\'existe pas.', HTTP_NOTFOUND);
}

//Récupération de la partie
$game = loadGame($_SESSION['gameId']);

//Détection de la validité de la partie
if(!$game['active']){
    throw new Exception('La partie est désactivée.', HTTP_UNAUTHORIZED);
}

//Si le joueur est seul contre des CPU,
//Ses cartes se libèrent toutes seules
if(isFullCPU($game) && $game['winner'] != $_SESSION['playerId']){
	//Libération des cartes
	releasePlayerCards($game);

	//Désactivation de la partie
	$game['active'] = false;

	//Enregistrement de la partie
	saveGame($game);

	//Affichage au client
	echo displayGameToClient($game);
	return;
}


//Vérification de l'état de la partie
if(!isset($game['winner']) || $game['winner'] != $_SESSION['playerId']){
	gamelog(sprintf('[%s] Le joueur %s n\'a pas gagné la partie.', $game['id'], $_SESSION['playerId']));
	throw new Exception(sprintf('Le joueur %s n\'a pas gagné la partie.', $_SESSION['playerId']), HTTP_NOTFOUND);
}

//Vérification si le joueur connecté est bien le même que celui qui a gagné la partie
if(!isset($game['winner']) || $game['winner'] != $_SESSION['playerId']){
	gamelog(sprintf('[%s] Le joueur %s n\'a pas gagné la partie.', $game['id'], $_SESSION['playerId']));
	throw new Exception(sprintf('Le joueur %s n\'a pas gagné la partie.', $_SESSION['playerId']), HTTP_NOTFOUND);
}

$poorPlayer = (string)validGet('player');
$poorCard  = (string)validGet('card');

//Vérification si le joueur gagnant ne veut pas une de ses propres cartes
if($_SESSION['playerId'] == $poorPlayer){
	throw new Exception(sprintf('Vous ne pouvez pas choisir votre propre carte.'), HTTP_UNAUTHORIZED);
}

$cardsToChoose = getCardsToChoose($game, $_SESSION['playerId']);

//Vérification si la carte voulue appartient bien au joueur demandé
if(!isset($cardsToChoose[$poorPlayer]) || !in_array($poorCard, $cardsToChoose[$poorPlayer])){
	gamelog(sprintf('[%s] Le joueur %s n\'a pas joué la carte %s.', $game['id'], $poorPlayer, $poorCard));
	throw new Exception(sprintf('Le joueur %s n\'a pas joué la carte %s.', $poorPlayer, $poorCard), HTTP_NOTFOUND);
}


//Suppression de la carte dans le jeu du joueur si celui ci n'est pas un cpu
if($game['players'][$poorPlayer]['type'] == 'human'){
	if(!takePlayerCard($poorPlayer, $card)){
		throw new Exception(sprintf('Impossible de supprimer la carte %s du joueur %s.', $poorCard, $poorPlayer), HTTP_NOTFOUND);
	}
}

//Ajout de la carte dans le jeu du joueur
addCardToPlayer($_SESSION['playerId'], $poorCard);

//Libération des cartes
releasePlayerCards($game);

//Désactivation de la partie
$game['active'] = false;

//Enregistrement de la partie
saveGame($game);

//Affichage au client
echo displayGameToClient($game);

